Synapse a komunikace pomoci TTCPBlockSocket
Otázka od: Antonin Rezac
2. 11. 2004 16:18
Nejaky cas mi bezi u zakazniku dve aplikace ("klient-server"), ktere spolu
komunikuji pres TCP pomoci jednoducheho protokolu (dotaz-odpoved-potvrzeni).
Pouzivam TClientSocket a TServerSocket v Blocking rezimu. Protoze komunikace
probiha min. 1xza sek., nachavam spojeni aktivni po celou dobu behu aplikace
(12-14hod. denne). Velmi nahodne se stava, ze server ev. klient odesle data,
ale "protistrana" je neprijme. Tuto situaci resim uzavreni a obnovenim
spojeni a opakovanim "komunikacniho bloku". Je to vsak reseni nasledku a ne
priciny a tak jsem chtel pouzit misto vyse uvedenych komponet Synapsi. Pro
overeni funkcnosti jsem si "zbastlil" testovaci aplikaci.
A v ni se mi deje nasledujici :
- v cyklu I:=1..n probiha komunikace
- klient -> server - klient posila dotaz, ktery obsahuje hodnotu
I
- server -> klient - server jako odpoved vraci prijatou hodnotu
z dotazu
- klient -> server - jako potvrzeni se vraci priznak dle toho,
je-li hodnota odpovedi=I, event. dle toho, zda doslo pri cteni odpovedi k
timeoutu
- nahodne se stava, ze klient odesle dotaz ( napr. hodnotu 123 ),
server prijme 123 a stejnou hodnotu i odesle. Pri cteni
odpovedi klientem vsak dojde k timeoutu (10060). Klient odesle potvrzeni. V
dalsim cyklu pak klient odesle hodnotu 124, server prijme hodnotu 124 a
tutez hodnotu odesle jako odpoved. Klient vsak prijme hodnotu 123. Cetnost
vyskytu tohoto chovani je ovlivnen HW a take zpozdenim, ktere je vlozeno
mezi jednotlive cykly.
Nesetkal se nekdo s podobnym jevem ?
A.Rezac
Odpovedá: Lukas Gebauer
2. 11. 2004 16:50
> - nahodne se stava, ze klient odesle dotaz ( napr. hodnotu 123 ),
> server prijme 123 a stejnou hodnotu i odesle. Pri cteni
> odpovedi klientem vsak dojde k timeoutu (10060). Klient odesle potvrzeni. V
> dalsim cyklu pak klient odesle hodnotu 124, server prijme hodnotu 124 a
> tutez hodnotu odesle jako odpoved. Klient vsak prijme hodnotu 123. Cetnost
> vyskytu tohoto chovani je ovlivnen HW a take zpozdenim, ktere je vlozeno
> mezi jednotlive cykly.
> Nesetkal se nekdo s podobnym jevem ?
Dovedu si to predstavit snad jen tehdy, bylo-li by toi naprogramovani
spatne nebo nevhodne. Jsou lide, kteri zvykli z jinych komponent, delaji
pro programovani v Synapsi zbytecne chyby.
Na posouzeni cele veci je potreba znat, jak odesilas data, a hlavne jakym
zpusobem je vlastne prijimas. Nejlepsi by byla nejaka prima ukazka
pouziteho kodu (tech casti, ktere volaji odesilaci funkce Synapse a ktere
volaji prijimaci funkce Synapse). Pokud svuj kod nechces vytrubovat do
konference, klidne se obrat primo na muj mail.
--
Lukas Gebauer.
E-mail: gebauerl@mlp.cz
WEB: http://www.ararat.cz/synapse - Synapse Delphi and Kylix TCP/IP
Library